package com.albaba.designpattern.composite.text_002;

import java.util.ArrayList;

/**
 * @Description: 容器对象，表示文件夹
 * @Author zx
 * @Date 2025/2/21 14:59
 * @Version 1.0
 */
public class Directory extends Entry {

    // 文件夹的名字
    private String name;

    // 文件夹下的所有文件和文件夹
    private ArrayList<Entry> directory = new ArrayList<>();

    public Directory(String name) {
        this.name = name;
    }


    @Override
    public String getName() {
        return this.name;
    }

    /**
     * 获取文件夹的大小
     * 1、如果entry对象是file类型，则调用getSize方法获取文件大小
     * 2、如果entry对象是directory类型，则遍历directory，调用getSize方法获取文件大小
     * @return
     */
    @Override
    public int getSize() {
        int size = 0;
        // 遍历directory，获取文件大小
        for (Entry entry : directory) {
            if (entry instanceof File) {
                size += entry.getSize();
            } else {
                size += entry.getSize();
            }
        }
        return size;
    }

    @Override
    public Entry add(Entry entry) {
        directory.add(entry);
        return this;
    }

    @Override
    public void printList(String prefix) {
        System.out.println(prefix + "/" + this);
        for (Entry entry : directory) {
            entry.printList(prefix + "/" + this.getName());
        }
    }
}
